package unmsm.fisi.tesis.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import unmsm.fisi.tesis.coneccion.ConexionWithSQL;
import unmsm.fisi.tesis.entidad.Configuracion;
import unmsm.fisi.tesis.entidad.Cromosoma;
import unmsm.fisi.tesis.servicio.ConocimientoFitness;

public class ConfiguracionDAO {

	
	public static void guardarValoresConfiguracion(Configuracion conf, String codigoOrganizaciones, String numReglasConsiderar) {
		  
		Connection con = ConexionWithSQL.obtenerConexion();
		try {
			   
		      CallableStatement cstmt = con.prepareCall("{call dbo.sp_asignarValoresConfiguracion(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)}");
		      cstmt.setInt("NUMEROPACIENTESACONSIDERAR", conf.getNumeroPacientes());
		      cstmt.setInt("NUMEROPOBLACIONACONSIDERAR", conf.getNumeroPoblacion());
		      cstmt.setDouble("PROBABIBLIDADCROSSOVER", conf.getProbabilidadCrossover_x());
		      cstmt.setDouble("PROBABILIDADMUTACION", conf.getProbabilidadMutacion_y());
		      cstmt.setInt("NUMEROGENERACIONACONSIDERAR", conf.getNumGeneraciones());
		      cstmt.setString("CONDICIONPARADA", conf.getCondicionParada());
		      cstmt.setInt("DATOPARADA", conf.getDatoParada());
		      cstmt.setString("METODOSELECCION", conf.getMetodoSeleccion());
		      cstmt.setString("OPERADORCROOSOVER", conf.getOperadorCroosover());
		      cstmt.setString("OPERADORMUTACION", conf.getOperadorMutacion());
		      cstmt.setInt("NUMEROHALLAZGOSACONSIDERAR", conf.getNumHallazgos());
		      cstmt.setString("CODIGOORGANIZACIONES", codigoOrganizaciones);
		      cstmt.setString("LISTANUMEROREGLASACONSIDERAR", numReglasConsiderar);
		      cstmt.registerOutParameter("CODIGOCONFIGURACION", java.sql.Types.INTEGER);
		      cstmt.execute();
		      System.out.println("MANAGER ID: " + cstmt.getObject("CODIGOCONFIGURACION"));
		      conf.setCodigoConfiguracion(cstmt.getInt("CODIGOCONFIGURACION"));
		      System.out.println("MANAGER ID: " + cstmt.getInt("CODIGOCONFIGURACION"));
		      cstmt.close();
		   }
		   catch (Exception e) {
		      e.printStackTrace();
		   }
		   finally {
				 if (con != null) try { con.close(); } catch(Exception e) {e.printStackTrace();}
	        }
	}
public static int obtenerUltimoNumeroConfiguracion() {
		
		Connection cnx = ConexionWithSQL.obtenerConexion();
		
		int numeroConfiguracion = 0;
		
		try
		{
			CallableStatement cstmt = cnx.prepareCall("{call dbo.sp_obtenerUltimoNumeroConfiguracion(  )}");
		    ResultSet rs =  cstmt.executeQuery();
		     
			while(rs.next())
			{
				numeroConfiguracion =  rs.getInt("NUMEROCONFIGURACION");
			}
			
			rs.close();
			cstmt.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
			System.out.print(e.getMessage());
			
		}finally {
			 if (cnx != null) try { cnx.close(); } catch(Exception e) {e.printStackTrace();}
        }
		
		return numeroConfiguracion;
	}
}
